home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / src / devs / agnet / init.c < prev    next >
C/C++ Source or Header  |  1993-10-08  |  2KB  |  93 lines

  1. RCS_ID_C="$Id: init.c,v 3.1 93/10/07 19:24:21 ppessi Exp $";
  2. /*
  3.  * init.c --- startup code for agnet.device
  4.  *
  5.  * Author: ppessi <Pekka.Pessi@hut.fi>
  6.  *
  7.  * Copyright (c) 1993 OHT-AmiTCP/IP Group,
  8.  *                    Helsinki University of Technology, Finland.
  9.  *                    All rights reserved.
  10.  *
  11.  * Created      : Thu Jan 21 17:32:55 1993 ppessi
  12.  * Last modified: Thu Oct  7 18:25:35 1993 ppessi
  13.  *
  14.  * $Log:    init.c,v $
  15.  * Revision 3.1  93/10/07  19:24:21  ppessi
  16.  * Release 2.1 version
  17.  * 
  18.  * Revision 2.1  93/05/14  16:48:31  ppessi
  19.  * Release version
  20.  * 
  21.  */
  22.  
  23. #include <clib/exec_protos.h>
  24. #include <clib/dos_protos.h>
  25. #include <clib/utility_protos.h>
  26. #include <clib/timer_protos.h>
  27. #include <clib/alib_stdio_protos.h>
  28.  
  29. #ifdef __SASC
  30. #include <pragmas/exec_pragmas.h>
  31. #endif
  32.  
  33. #define NOINLINE
  34.  
  35. #include "agnet.h"
  36. #include "agnet_protos.h"
  37. #include "agnet_rev.h"
  38.  
  39. /* This is only declaration, it is defined after Start() */
  40. extern const APTR FunctionTable[];
  41.  
  42. /*
  43.  * Starting stub routine
  44.  */
  45. LONG ASM Start(VOID)
  46. {
  47.   LONG exit_val;
  48.   struct AgnetDevice *ad;
  49.  
  50.   /* Allocate a device base */
  51.   if (!(ad = (struct AgnetDevice *)
  52.     MakeLibrary(FunctionTable, NULL, NULL, sizeof(*ad), NULL)))
  53.     return(20);
  54.  
  55.   ad->ad_SysBase = *(struct ExecBase **)4;
  56.   ad->ad_DOSBase = OpenLibrary("dos.library", 36L);
  57.   ad->ad_IntuitionBase = OpenLibrary("intuition.library",37L);
  58.  
  59.   /* Open timer device */
  60.   if (ad->ad_DOSBase && ad->ad_IntuitionBase && 
  61.       !OpenDevice("timer.device", UNIT_MICROHZ, 
  62.          (struct IORequest *)&ad->ad_Timer, 0L)) {
  63.     /* Call main routine */
  64.     exit_val = main(ad);
  65.     CloseDevice(&ad->ad_Timer);
  66.   } else {
  67.     exit_val = 40;
  68.   }
  69.  
  70.   if (ad->ad_IntuitionBase) CloseLibrary(ad->ad_IntuitionBase);
  71.   if (ad->ad_DOSBase) CloseLibrary(ad->ad_DOSBase);
  72.   FreeMem((UBYTE *)ad - ad->ad_Device.lib_NegSize,
  73.       ad->ad_Device.lib_NegSize + ad->ad_Device.lib_PosSize);
  74.   return exit_val;
  75. }
  76.  
  77. struct AgnetDevice *AgnetDeviceBase = NULL;
  78.  
  79. /*
  80.  * Variables for Device Base
  81.  */
  82. const APTR FunctionTable[] =
  83. {
  84.   (APTR) DevOpen,
  85.   (APTR) DevClose,
  86.   (APTR) DevExpunge,
  87.   (APTR) DevReserved,
  88.   (APTR) DevBeginIO,
  89.   (APTR) DevAbortIO,
  90.   (APTR) -1
  91. };
  92.  
  93.